evdev-rs: Enforce proper type for tv_usec / MICROS_PER_SEC#118
Open
glaubitz wants to merge 1 commit intondesh26:masterfrom
Open
evdev-rs: Enforce proper type for tv_usec / MICROS_PER_SEC#118glaubitz wants to merge 1 commit intondesh26:masterfrom
glaubitz wants to merge 1 commit intondesh26:masterfrom
Conversation
On sparc64, suseconds_t is of type i32 while tv_sec is of type time_t
which itself is of type i64 which causes the build on sparc64 to fail:
error[E0308]: mismatched types
--> src/lib.rs:210:30
|
210 | tv_sec: tv_sec + tv_usec / MICROS_PER_SEC,
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected `i64`, found `i32`
error[E0277]: cannot add `i32` to `i64`
--> src/lib.rs:210:28
|
210 | tv_sec: tv_sec + tv_usec / MICROS_PER_SEC,
| ^ no implementation for `i64 + i32`
|
= help: the trait `Add<i32>` is not implemented for `i64`
= help: the following other types implement trait `Add<Rhs>`:
`&i64` implements `Add<i64>`
`&i64` implements `Add`
`i64` implements `Add<&i64>`
`i64` implements `Add`
The type mismatch for suseconds_t is a result of binary compatibility
with Solaris and cannot be changed as it's part of the ABI. Since the
values for suseconds_t never exceed 32-bit boundaries, it's not really
a problem and we can safely cast tv_usec / MICROS_PER_SEC to time_t to
fix the build on sparc64.
Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On sparc64, suseconds_t is of type i32 while tv_sec is of type time_t which itself is of type i64 which causes the build on sparc64 to fail:
error[E0308]: mismatched types
--> src/lib.rs:210:30
|
210 | tv_sec: tv_sec + tv_usec / MICROS_PER_SEC,
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected
i64, foundi32error[E0277]: cannot add
i32toi64--> src/lib.rs:210:28
|
210 | tv_sec: tv_sec + tv_usec / MICROS_PER_SEC,
| ^ no implementation for
i64 + i32|
= help: the trait
Add<i32>is not implemented fori64= help: the following other types implement trait
Add<Rhs>:&i64implementsAdd<i64>&i64implementsAddi64implementsAdd<&i64>i64implementsAddThe type mismatch for suseconds_t is a result of binary compatibility with Solaris and cannot be changed as it's part of the ABI. Since the values for suseconds_t never exceed 32-bit boundaries, it's not really a problem and we can safely cast tv_usec / MICROS_PER_SEC to time_t to fix the build on sparc64.